#ifndef SHADER_H
#define SHADER_H

#include <string>

#include <glm.hpp>
#include <gtc/matrix_transform.hpp>
#include <gtc/type_ptr.hpp>

class Shader
{
public:
	enum slot {
		DIFFUSE,
		SPECULAR,
		EMMISION
	};

public:
	Shader(const char* vertexPath, const char* fragmentPath);

	void use();
	void setUniform3f(const char* paramName, glm::vec3 param);
	void setUniform1f(const char* paramName, float param);
	void setUniform1i(const char* paramName, unsigned int slot);

private:
	void checkCompileErrors(unsigned int ID, std::string type);

public:
	std::string vertexString;
	std::string fragmentString;
	const char* vertexSource;
	const char* fragmentSource;
	unsigned int ID; // shader program ID
};
#endif SHADER_H
